package zw_401_500.zw_500_键盘行;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class Solution {

    public static void main(String[] args) {
        String[] words = {"Hello", "Alaska", "Dad", "Peace"};
        String[] s = findWords(words);
        for (int i = 0; i < s.length; i++) {
            System.out.println(s[i]);
        }

    }

    /**
     * Stream流 + 正则表达式
     * @param words
     * @return
     */
//    public String[] findWords(String[] words) {
//        return Arrays.asList(words)
//                .stream()
//                .filter(s ->
//                        s.toLowerCase().replaceAll("^[qwertyuiop]*$", "").equals("")
//                                || s.toLowerCase().replaceAll("^[asdfghjkl]*$", "").equals("")
//                                || s.toLowerCase().replaceAll("^[zxcvbnm]*$", "").equals("")
//                )
//                .collect(Collectors.toList())
//                .toArray(new String[0]);
//    }


    /**
     * 遍历
     *
     * @param words
     * @return
     */
    public static String[] findWords(String[] words) {
        List<String> list = new ArrayList<String>();
        String rowIdx = "12210111011122000010020202";
        for (String word : words) {
            boolean isValid = true;
            char idx = rowIdx.charAt(Character.toLowerCase(word.charAt(0)) - 'a');
            for (int i = 1; i < word.length(); ++i) {
                if (rowIdx.charAt(Character.toLowerCase(word.charAt(i)) - 'a') != idx) {
                    isValid = false;
                    break;
                }
            }
            if (isValid) {
                list.add(word);
            }
        }
        String[] ans = new String[list.size()];
        for (int i = 0; i < list.size(); ++i) {
            ans[i] = list.get(i);
        }
        return ans;
    }


//    public static String[] findWords(String[] words) {
//        String[] ss = new String[]{"qwertyuiop", "asdfghjkl", "zxcvbnm"};
//        int[] hash = new int[26];
//        for (int i = 0; i < ss.length; i++) {
//            for (char c : ss[i].toCharArray()) hash[c - 'a'] = i;
//        }
//        List<String> list = new ArrayList<>();
//        out:
//        for (String w : words) {
//            int t = -1;
//            for (char c : w.toCharArray()) {
//                c = Character.toLowerCase(c);
//                if (t == -1) t = hash[c - 'a'];
//                else if (t != hash[c - 'a']) continue out;
//            }
//            list.add(w);
//        }
//        return list.toArray(new String[list.size()]);
//    }

}
